/**======================================================================================
 * 内容说明： 导入vue和elementui相关
 ======================================================================================*/
import babelpolyfill from 'babel-polyfill'
import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
/**======================================================================================
 * 内容说明： 导入router路由相关
 ======================================================================================*/
import VueRouter from 'vue-router'
import store from './vuex/store'
import Vuex from 'vuex'
import routes from './routes'

/**======================================================================================
 * 内容说明： 导入axios相关
 ======================================================================================*/
import axios from 'axios'
/**======================================================================================
 * 内容说明： 使用相关组件
 ======================================================================================*/
Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)
/**======================================================================================
 * 内容说明： 配置axios的全局基本路径全局属性配置
 ======================================================================================*/
axios.defaults.baseURL='http://localhost:80/'
Vue.prototype.$http = axios
/**======================================================================================
 * 内容说明： 路由配置
 ======================================================================================*/
const router = new VueRouter({
  routes
})
//添加请求拦截器(每次发送axios请求之前先执行这里) 这里帮你在请求头中携带token字段
axios.interceptors.request.use(
    config => {
      //JSON.parse ：把字符串转成json对象
      let user = JSON.parse(sessionStorage.getItem('user'));
      if (user && user.token){
        //添加header
        config.headers['token'] = user.token;
      }
      return config
    },
    err => {
      //Promise.reject()方法返回一个带有拒绝原因的Promise对象，在F12的console中显示报错
      Promise.reject(err)
    }
);
// use(两个参数)
axios.interceptors.response.use(res => {
    // 请求成功对响应数据做处理
    console.log(res)

    //如果res里面装的code是1001，代表后台返回是登录失效错误
    if (res.data.code === "1001"){

        var myHref = location.href;
        console.log(myHref)
        //http://localhost:8080/#/dept 1 http://localhost:8080/#/login 4次
        if (myHref.indexOf("login") === -1){
            ElementUI.Message({
                message: res.data.message,
                type: 'error'
            })
        }

        //跳转到登录
        router.push({ path: '/login' });
    }

    // 该返回的数据则是axios.then(res)中接收的数据
    return res
}, err => {
    // 在请求错误时要做的事儿

    // 该返回的数据则是axios.catch(err)中接收的数据
    return Promise.reject(err)
})


/**======================================================================================
 * 内容说明： 路由前置拦截器，用作登录检查
 ======================================================================================*/
router.beforeEach((to, from, next) => {
  //NProgress.start();
  if (to.path === '/login') { //访问的登录路由
    sessionStorage.removeItem('user');
  }
  let user = JSON.parse(sessionStorage.getItem('user'));
  //判断user是否有效  // /dept
  if (!user && to.path !== '/login' && to.path !== '/shopRegister') {
      ElementUI.Message({
          message: "缓存过期，需要重新登录",
          type: 'error'
      })
    next({ path: '/login' })
  } else {
    //放行
    next()
  }
})

/**======================================================================================
 * 内容说明： 创建Vue对象，挂载 #app元素 ， 见Vue.app
 ======================================================================================*/

new Vue({
  //el: '#app',
  //template: '<App/>',
  router,
  store,
  //components: { App }
  render: h => h(App)
}).$mount('#app')